package com.ffyc.backserver.service;

import com.ffyc.backserver.dao.AdminDao;
import com.ffyc.backserver.dao.LoginDao;
import com.ffyc.backserver.model.Admin;
import com.ffyc.backserver.model.Menu;
import com.ffyc.backserver.model.Role;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

@Service
@Transactional//Sping事务
public class AdminService {
@Autowired
AdminDao  adminDao;
    public PageInfo<Admin> findAdmin(Admin admin) {
        /*只需要告诉分页插件 当前页码和页数大小 自动生成limit拼接到查询语句中*/
        PageHelper.startPage(admin.getPageNum(),admin.getPageSize());
        List<Admin> adminList=adminDao.findAdmin(admin);
        PageInfo<Admin> pageInfo=new PageInfo<>(adminList);
        return pageInfo;//分页查询后的数据

    }

    /**
     * 添加操作查询出所有的角色
     * @return
     */
    public List<Role> findRoles() {
        return adminDao.findRoles();
    }

    /**
     * 添加管理员操作
     * 1.处理密码(加密)默认111
     * 2.向管理员表中添加数据
     * 3.向管理员与角色表中添加数据
     * @param admin
     */
    public void saveAdmin(Admin admin) {
    //1.密码加密
        String password="111111";
        /*2.上传默认头像*/
        admin.setNewImgname("20211126001355875.png");
    admin.setPassword(DigestUtils.md5Hex(password));
    //3.添加管理员
        adminDao.insertAdmin(admin);
    //将时间格式转
        //* utc转本地时间*//*
        //这里开始
        /*Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        // 2020-09-18T06:44:32.552Z 对应的时间格式 yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
        try {
            String strdata=sdf.format(admin.getBirthday());
            date = sdf.parse(strdata);
        } catch (ParseException e){
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR)+8);
        SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = calendar.getTime();
        admin.setBirthday(date1);*/

        //循环拿出roleId
        if (admin.getRoleId()!= null) {
            for (int roleId : admin.getRoleId()) {
            // 向数据库中插入关系
                adminDao.insertAdminRole(admin.getId(), roleId);
            }
        }

    }

    public Admin findAdminById(Integer id) {
        Admin admin= adminDao.findAdminById(id);
        //查询管理员信息时将角色id组装到数组中
        Integer[] roleids=new Integer[admin.getRoles().size()];
        for (int i = 0; i <admin.getRoles().size() ; i++) {
            roleids[i]=admin.getRoles().get(i).getId();
        }
        admin.setRoleId(roleids);
        return admin;

    }

    /*根据id删除管理员
    * 1.删除管理员与角色表的关系
    * 2.删除管理员*/
    public void deleteAdmin(Integer id) {
        //删除关系
        adminDao.deleteAdmin_Role(id);
        //删除管理员
        adminDao.deleteAdmin(id);
    }
    /*修改管理员
    * 1.删除原本的关联信息
    * 2.重新保存*/
    public void updataAdmin(Admin admin) {
        //删除关系
        adminDao.deleteAdmin_Role(admin.getId());
        //更新信息
        adminDao.updateAdmin(admin);
        //重新保存关系
        if (admin.getRoleId()!= null) {
            for (int roleId : admin.getRoleId()) {
                // 向数据库中插入关系
                adminDao.insertAdminRole(admin.getId(), roleId);
            }
        }
    }

    /*管理员头像上传*/
    public void uploadImg(Admin admin) {
        adminDao.uploadImg(admin);
    }
}
